home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Freeware / Miro 1.0 / Miro_Installer.exe / xulrunner / chrome / toolkit.jar / content / global / printdialog.js < prev    next >
Encoding:
JavaScript  |  2005-03-09  |  15.2 KB  |  433 lines

  1. //@line 42 "/c/mozilla/toolkit/components/printing/content/printdialog.js"
  2.  
  3. var dialog;
  4. var printService       = null;
  5. var printOptions       = null;
  6. var gOriginalNumCopies = 1;
  7.  
  8. var paramBlock;
  9. var gPrefs             = null;
  10. var gPrintSettings     = null;
  11. var gWebBrowserPrint   = null;
  12. var gPrintSetInterface = Components.interfaces.nsIPrintSettings;
  13. var doDebug            = false;
  14.  
  15. //---------------------------------------------------
  16. function initDialog()
  17. {
  18.   dialog = new Object;
  19.  
  20.   dialog.propertiesButton = document.getElementById("properties");
  21.   dialog.descText         = document.getElementById("descText");
  22.  
  23.   dialog.printrangeGroup = document.getElementById("printrangeGroup");
  24.   dialog.allpagesRadio   = document.getElementById("allpagesRadio");
  25.   dialog.rangeRadio      = document.getElementById("rangeRadio");
  26.   dialog.selectionRadio  = document.getElementById("selectionRadio");
  27.   dialog.frompageInput   = document.getElementById("frompageInput");
  28.   dialog.frompageLabel   = document.getElementById("frompageLabel");
  29.   dialog.topageInput     = document.getElementById("topageInput");
  30.   dialog.topageLabel     = document.getElementById("topageLabel");
  31.  
  32.   dialog.numCopiesInput  = document.getElementById("numCopiesInput");  
  33.  
  34.   dialog.printframeGroup      = document.getElementById("printframeGroup");
  35.   dialog.aslaidoutRadio       = document.getElementById("aslaidoutRadio");
  36.   dialog.selectedframeRadio   = document.getElementById("selectedframeRadio");
  37.   dialog.eachframesepRadio    = document.getElementById("eachframesepRadio");
  38.   dialog.printframeGroupLabel = document.getElementById("printframeGroupLabel");
  39.  
  40.   dialog.fileCheck       = document.getElementById("fileCheck");
  41.   dialog.printerLabel    = document.getElementById("printerLabel");
  42.   dialog.printerList     = document.getElementById("printerList");
  43.  
  44.   dialog.printButton     = document.documentElement.getButton("accept");
  45.  
  46.   // <data> elements
  47.   dialog.printName       = document.getElementById("printButton");
  48.   dialog.fpDialog        = document.getElementById("fpDialog");
  49.  
  50.   dialog.enabled         = false;
  51. }
  52.  
  53. //---------------------------------------------------
  54. function checkInteger(element)
  55. {
  56.   var value = element.value;
  57.   if (value && value.length > 0) {
  58.     value = value.replace(/[^0-9]/g,"");
  59.     if (!value) value = "";
  60.     element.value = value;
  61.   }
  62.   if (!value || value < 1 || value > 999)
  63.     dialog.printButton.setAttribute("disabled","true");
  64.   else
  65.     dialog.printButton.removeAttribute("disabled");
  66. }
  67.  
  68. //---------------------------------------------------
  69. function stripTrailingWhitespace(element)
  70. {
  71.   var value = element.value;
  72.   value = value.replace(/\s+$/,"");
  73.   element.value = value;
  74. }
  75.  
  76. //---------------------------------------------------
  77. function getPrinterDescription(printerName)
  78. {
  79.   var s = "";
  80.  
  81.   try {
  82.     /* This may not work with non-ASCII test (see bug 235763 comment #16) */
  83.     s = gPrefs.getCharPref("print.printer_" + printerName + ".printer_description")
  84.   } catch(e) {
  85.   }
  86.     
  87.   return s;
  88. }
  89.  
  90. //---------------------------------------------------
  91. function listElement(aListElement)
  92.   {
  93.     this.listElement = aListElement;
  94.   }
  95.  
  96. listElement.prototype =
  97.   {
  98.     clearList:
  99.       function ()
  100.         {
  101.           // remove the menupopup node child of the menulist.
  102.           var popup = this.listElement.firstChild;
  103.           if (popup) {
  104.             this.listElement.removeChild(popup);
  105.           }
  106.         },
  107.  
  108.     appendPrinterNames: 
  109.       function (aDataObject) 
  110.         { 
  111.           var list = document.getElementById("printerList"); 
  112.           var strDefaultPrinterName = "";
  113.           var printerName;
  114.  
  115.           // build popup menu from printer names
  116.           while (aDataObject.hasMoreElements()) {
  117.             printerName = aDataObject.getNext();
  118.             printerName = printerName.QueryInterface(Components.interfaces.nsISupportsString);
  119.             var printerNameStr = printerName.toString();
  120.             if (strDefaultPrinterName == "")
  121.                strDefaultPrinterName = printerNameStr;
  122.  
  123.             list.appendItem(printerNameStr, printerNameStr, getPrinterDescription(printerNameStr));
  124.           }
  125.           if (strDefaultPrinterName != "") {
  126.             this.listElement.removeAttribute("disabled");
  127.           } else {
  128.             var stringBundle = srGetStrBundle("chrome://global/locale/printing.properties");
  129.             this.listElement.setAttribute("value", strDefaultPrinterName);
  130.             this.listElement.setAttribute("label", stringBundle.GetStringFromName("noprinter"));
  131.  
  132.             // disable dialog
  133.             this.listElement.setAttribute("disabled", "true");
  134.             dialog.printerLabel.setAttribute("disabled","true");
  135.             dialog.propertiesButton.setAttribute("disabled","true");
  136.             dialog.fileCheck.setAttribute("disabled","true");
  137.             dialog.printButton.setAttribute("disabled","true");
  138.           }
  139.  
  140.           return strDefaultPrinterName;
  141.         } 
  142.   };
  143.  
  144. //---------------------------------------------------
  145. function getPrinters()
  146. {
  147.   var printerEnumerator = printOptions.availablePrinters();
  148.  
  149.   var selectElement = new listElement(dialog.printerList);
  150.   selectElement.clearList();
  151.   var strDefaultPrinterName = selectElement.appendPrinterNames(printerEnumerator);
  152.  
  153.   selectElement.listElement.value = strDefaultPrinterName;
  154.  
  155.   // make sure we load the prefs for the initially selected printer
  156.   setPrinterDefaultsForSelectedPrinter();
  157. }
  158.  
  159.  
  160. //---------------------------------------------------
  161. // update gPrintSettings with the defaults for the selected printer
  162. function setPrinterDefaultsForSelectedPrinter()
  163. {
  164.   gPrintSettings.printerName = dialog.printerList.value;
  165.   
  166.   dialog.descText.value = getPrinterDescription(gPrintSettings.printerName);
  167.   
  168.   // First get any defaults from the printer 
  169.   printService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
  170.   
  171.   // now augment them with any values from last time
  172.   printService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSetInterface.kInitSaveAll);
  173.   
  174.   if (doDebug) {
  175.     dump("setPrinterDefaultsForSelectedPrinter: printerName='"+gPrintSettings.printerName+"', paperName='"+gPrintSettings.paperName+"'\n");
  176.   }
  177. }
  178.  
  179. //---------------------------------------------------
  180. function displayPropertiesDialog()
  181. {
  182.   gPrintSettings.numCopies = dialog.numCopiesInput.value;
  183.   try {
  184.     var printingPromptService = Components.classes["@mozilla.org/embedcomp/printingprompt-service;1"]
  185.                                                  .getService(Components.interfaces.nsIPrintingPromptService);
  186.     if (printingPromptService) {
  187.       printingPromptService.showPrinterProperties(null, dialog.printerList.value, gPrintSettings);
  188.       dialog.numCopiesInput.value = gPrintSettings.numCopies;
  189.     }
  190.   } catch(e) {
  191.     dump("problems getting printingPromptService\n");
  192.   }
  193. }
  194.  
  195. //---------------------------------------------------
  196. function doPrintRange(inx)
  197. {
  198.   if (inx == 1) {
  199.     dialog.frompageInput.removeAttribute("disabled");
  200.     dialog.frompageLabel.removeAttribute("disabled");
  201.     dialog.topageInput.removeAttribute("disabled");
  202.     dialog.topageLabel.removeAttribute("disabled");
  203.   } else {
  204.     dialog.frompageInput.setAttribute("disabled","true");
  205.     dialog.frompageLabel.setAttribute("disabled","true");
  206.     dialog.topageInput.setAttribute("disabled","true");
  207.     dialog.topageLabel.setAttribute("disabled","true");
  208.   }
  209. }
  210.  
  211. //---------------------------------------------------
  212. function loadDialog()
  213. {
  214.   var print_copies        = 1;
  215.   var print_selection_radio_enabled = false;
  216.   var print_frametype     = gPrintSetInterface.kSelectedFrame;
  217.   var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  218.   var print_tofile        = "";
  219.  
  220.   try {
  221.     gPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  222.  
  223.     printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"];
  224.     if (printService) {
  225.       printService = printService.getService();
  226.       if (printService) {
  227.         printService = printService.QueryInterface(Components.interfaces.nsIPrintSettingsService);
  228.         printOptions = printService.QueryInterface(Components.interfaces.nsIPrintOptions);
  229.       }
  230.     }
  231.   } catch(e) {}
  232.  
  233.   // Note: getPrinters sets up the PrintToFile radio buttons and initalises gPrintSettings
  234.   getPrinters();
  235.  
  236.   if (gPrintSettings) {
  237.     print_tofile        = gPrintSettings.printToFile;
  238.     gOriginalNumCopies  = gPrintSettings.numCopies;
  239.  
  240.     print_copies        = gPrintSettings.numCopies;
  241.     print_frametype     = gPrintSettings.printFrameType;
  242.     print_howToEnableUI = gPrintSettings.howToEnableFrameUI;
  243.     print_selection_radio_enabled = gPrintSettings.GetPrintOptions(gPrintSetInterface.kEnableSelectionRB);
  244.   }
  245.  
  246.   if (doDebug) {
  247.     dump("loadDialog*********************************************\n");
  248.     dump("print_tofile            "+print_tofile+"\n");
  249.     dump("print_frame             "+print_frametype+"\n");
  250.     dump("print_howToEnableUI     "+print_howToEnableUI+"\n");
  251.     dump("selection_radio_enabled "+print_selection_radio_enabled+"\n");
  252.   }
  253.  
  254.   dialog.printrangeGroup.selectedItem = dialog.allpagesRadio;
  255.   if (print_selection_radio_enabled) {
  256.     dialog.selectionRadio.removeAttribute("disabled");
  257.   } else {
  258.     dialog.selectionRadio.setAttribute("disabled","true");
  259.   }
  260.   doPrintRange(dialog.rangeRadio.selected);
  261.   dialog.frompageInput.value  = 1;
  262.   dialog.topageInput.value    = 1;
  263.   dialog.numCopiesInput.value = print_copies;
  264.  
  265.   if (doDebug) {
  266.     dump("print_howToEnableUI: "+print_howToEnableUI+"\n");
  267.   }
  268.  
  269.   // print frame
  270.   if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAll) {
  271.     dialog.aslaidoutRadio.removeAttribute("disabled");
  272.  
  273.     dialog.selectedframeRadio.removeAttribute("disabled");
  274.     dialog.eachframesepRadio.removeAttribute("disabled");
  275.     dialog.printframeGroupLabel.removeAttribute("disabled");
  276.  
  277.     // initialize radio group
  278.     dialog.printframeGroup.selectedItem = dialog.selectedframeRadio;
  279.  
  280.   } else if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAsIsAndEach) {
  281.     dialog.aslaidoutRadio.removeAttribute("disabled");       //enable
  282.  
  283.     dialog.selectedframeRadio.setAttribute("disabled","true"); // disable
  284.     dialog.eachframesepRadio.removeAttribute("disabled");       // enable
  285.     dialog.printframeGroupLabel.removeAttribute("disabled");    // enable
  286.  
  287.     // initialize
  288.     dialog.printframeGroup.selectedItem = dialog.eachframesepRadio;
  289.  
  290.   } else {
  291.     dialog.aslaidoutRadio.setAttribute("disabled","true");
  292.     dialog.selectedframeRadio.setAttribute("disabled","true");
  293.     dialog.eachframesepRadio.setAttribute("disabled","true");
  294.     dialog.printframeGroupLabel.setAttribute("disabled","true");
  295.   }
  296.  
  297.   dialog.printButton.label = dialog.printName.getAttribute("label");
  298. }
  299.  
  300. //---------------------------------------------------
  301. function onLoad()
  302. {
  303.   // Init dialog.
  304.   initDialog();
  305.  
  306.   // param[0]: nsIPrintSettings object
  307.   // param[1]: container for return value (1 = print, 0 = cancel)
  308.  
  309.   gPrintSettings   = window.arguments[0].QueryInterface(gPrintSetInterface);
  310.   gWebBrowserPrint = window.arguments[1].QueryInterface(Components.interfaces.nsIWebBrowserPrint);
  311.   paramBlock       = window.arguments[2].QueryInterface(Components.interfaces.nsIDialogParamBlock);
  312.  
  313.   // default return value is "cancel"
  314.   paramBlock.SetInt(0, 0);
  315.  
  316.   loadDialog();
  317. }
  318.  
  319. //---------------------------------------------------
  320. function onAccept()
  321. {
  322.   if (gPrintSettings != null) {
  323.     var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  324.  
  325.     // save these out so they can be picked up by the device spec
  326.     gPrintSettings.printerName = dialog.printerList.value;
  327.     print_howToEnableUI        = gPrintSettings.howToEnableFrameUI;
  328.     gPrintSettings.printToFile = dialog.fileCheck.checked;
  329.  
  330.     if (gPrintSettings.printToFile && !chooseFile())
  331.       return false;
  332.  
  333.     if (dialog.allpagesRadio.selected) {
  334.       gPrintSettings.printRange = gPrintSetInterface.kRangeAllPages;
  335.     } else if (dialog.rangeRadio.selected) {
  336.       gPrintSettings.printRange = gPrintSetInterface.kRangeSpecifiedPageRange;
  337.     } else if (dialog.selectionRadio.selected) {
  338.       gPrintSettings.printRange = gPrintSetInterface.kRangeSelection;
  339.     }
  340.     gPrintSettings.startPageRange = dialog.frompageInput.value;
  341.     gPrintSettings.endPageRange   = dialog.topageInput.value;
  342.     gPrintSettings.numCopies      = dialog.numCopiesInput.value;
  343.  
  344.     var frametype = gPrintSetInterface.kNoFrames;
  345.     if (print_howToEnableUI != gPrintSetInterface.kFrameEnableNone) {
  346.       if (dialog.aslaidoutRadio.selected) {
  347.         frametype = gPrintSetInterface.kFramesAsIs;
  348.       } else if (dialog.selectedframeRadio.selected) {
  349.         frametype = gPrintSetInterface.kSelectedFrame;
  350.       } else if (dialog.eachframesepRadio.selected) {
  351.         frametype = gPrintSetInterface.kEachFrameSep;
  352.       } else {
  353.         frametype = gPrintSetInterface.kSelectedFrame;
  354.       }
  355.     }
  356.     gPrintSettings.printFrameType = frametype;
  357.     if (doDebug) {
  358.       dump("onAccept*********************************************\n");
  359.       dump("frametype      "+frametype+"\n");
  360.       dump("numCopies      "+gPrintSettings.numCopies+"\n");
  361.       dump("printRange     "+gPrintSettings.printRange+"\n");
  362.       dump("printerName    "+gPrintSettings.printerName+"\n");
  363.       dump("startPageRange "+gPrintSettings.startPageRange+"\n");
  364.       dump("endPageRange   "+gPrintSettings.endPageRange+"\n");
  365.       dump("printToFile    "+gPrintSettings.printToFile+"\n");
  366.     }
  367.   }
  368.  
  369.   var saveToPrefs = false;
  370.  
  371.   saveToPrefs = gPrefs.getBoolPref("print.save_print_settings");
  372.  
  373.   if (saveToPrefs && printService != null) {
  374.     var flags = gPrintSetInterface.kInitSavePaperSizeType  | 
  375.                 gPrintSetInterface.kInitSavePaperSizeUnit  |
  376.                 gPrintSetInterface.kInitSavePaperWidth     | 
  377.                 gPrintSetInterface.kInitSavePaperHeight    |
  378.                 gPrintSetInterface.kInitSavePaperName      | 
  379.                 gPrintSetInterface.kInitSaveColorSpace     |
  380.                 gPrintSetInterface.kInitSaveInColor        |
  381.                 gPrintSetInterface.kInitSaveResolutionName |
  382.                 gPrintSetInterface.kInitSaveDownloadFonts  |
  383.                 gPrintSetInterface.kInitSavePrintCommand   |
  384.                 gPrintSetInterface.kInitSaveShrinkToFit    |
  385.                 gPrintSetInterface.kInitSaveScaling;
  386.     printService.savePrintSettingsToPrefs(gPrintSettings, true, flags);
  387.   }
  388.  
  389.   // set return value to "print"
  390.   if (paramBlock) {
  391.     paramBlock.SetInt(0, 1);
  392.   } else {
  393.     dump("*** FATAL ERROR: No paramBlock\n");
  394.   }
  395.  
  396.   return true;
  397. }
  398.  
  399. //---------------------------------------------------
  400. function onCancel()
  401. {
  402.   // set return value to "cancel"
  403.   if (paramBlock) {
  404.     paramBlock.SetInt(0, 0);
  405.   } else {
  406.     dump("*** FATAL ERROR: No paramBlock\n");
  407.   }
  408.  
  409.   return true;
  410. }
  411.  
  412. //---------------------------------------------------
  413. const nsIFilePicker = Components.interfaces.nsIFilePicker;
  414. function chooseFile()
  415. {
  416.   try {
  417.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  418.                        .createInstance(nsIFilePicker);
  419.     fp.init(window, dialog.fpDialog.getAttribute("label"), nsIFilePicker.modeSave);
  420.     fp.appendFilters(nsIFilePicker.filterAll);
  421.     if (fp.show() != Components.interfaces.nsIFilePicker.returnCancel &&
  422.         fp.file && fp.file.path) {
  423.       gPrintSettings.toFileName = fp.file.path;
  424.       return true;
  425.     }
  426.   } catch(ex) {
  427.     dump(ex);
  428.   }
  429.  
  430.   return false;
  431. }
  432.  
  433.